~ 開放的軟體思維 ~
今天我們來談談實作演算法後在AWS要做哪些事情
一般來說,一套可以商用的系統,是穩定快速容錯的,大多數商業級的架構都會需要一個絕對的核心資訊交換系統去協調所有工作的運作,Cloud Native 也不例外,Lambda 可能連接 RDS 做共同的資料交換,也有可能與 SQS 、SNS 整合為了不同目的與功能,微服務小而美的背後會有一個強大的資料交換中心支援,才有辦法支撐起商業級的運用,這邊對於交易系統的核心,因為對於低延遲的需求,可以選擇 Solace 作為建構系統的支柱。
官網:https://solace.com/
Solace PubSub+ 平台是一個完整的事件流和管理平台,專為實時企業設計。該平台幫助企業在混合雲、多雲和物聯網環境中設計、部署和管理事件驅動架構(Event Driven Architecture,EDA),使企業能夠更加整合和事件驅動。
軟體架構的演進到現今微服務架構在 EDA 之上已經成為設計系統的首選,除了 Web API 的本質上仍有很大一部分保有 request - reply 的服務模型,現今採用 EDA & Streaming 的架構無疑就是追求極致效能與速度的康莊大道,對交易平台來說,訊息的處理量瓶頸會在 Market Data 上,我們希望得到更多樣化的市場數據,但又不希望影響到延遲,採用數據訊息路由傳輸平台是必須的,Solace 這家公司就是解決這類的問題而存在。
注意:ECS 可能會需要少許費用,用完要關閉
Solace 把他們的服務軟體化後再 Dockerize 到 docker hub 上,我們都可以從上面把他 docker pull 下來玩玩
下面是官網預設的 docker run 指令()
# pull image only
$ docker pull solace/solace-pubsub-standard
# run it directly
$ docker run -d -p 8080:8080 \
-p 55554:55555 \
-p 8008:8008 \
-p 1883:1883 \
-p 8000:8000 \
-p 5672:5672 \
-p 9000:9000 \
-p 2222:2222 \
--shm-size=2g \
--env username_admin_globalaccesslevel=admin \
--env username_admin_password=admin \
--name=solace solace/solace-pubsub-standard
接著我們可以把他 push 到 AWS ECR 上,
# check use the correct account
$ aws iam get-user
$ aws ecr get-login-password \
--region ap-northeast-1 | docker login --username AWS \
--password-stdin <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com
# 建立一個新的 repository
$ aws ecr create-repository \
--repository-name solace-image \
--image-scanning-configuration scanOnPush=true \
--image-tag-mutability MUTABLE
$ docker tag solace/solace-pubsub-standard:latest \
<account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/solace-image:latest
$ docker push <account_id>.dkr.ecr.ap-northeast-1.amazonaws.com/solace-image:latest
接著打開 ECS 介面,建立一個 cluster ,或是使用指令建立:
$ aws ecr create-repository \
--repository-name solace-image-repository \
--image-scanning-configuration scanOnPush=true \
--image-tag-mutability MUTABLE
接著啟動服務會需要先建立 task definition
Task definition family:solace-task-definition
Launch type:AWS Fargate
Task Size:CPU - 2vCPU,Memory - 8GB
(Solace 最小系統需求:2 CPU cores Memory::2GB,可以吃100條連線 )
Container - 1 ImageUri 請填入上面 ECR 新建立的 repository ImageUrl
ecsTaskExecutionRole 的 policy 如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}
port mapping & environment variables 如下:
接著就可以建立一個服務,設定如下:
這裡我們先設定 Security Group Allow All TCP from Anywhere,測通之後再限縮 Source 為其他 AWS Services’ Security Group
開起來後長這樣:
會需要開起來的 public ip 測試
在瀏覽器網址列打上: http://{public ip}:8080 會看到 solace login page
如果要關閉可以設定 Desired tasks = 0
如果您有對於巨量數據串流處理有強烈的學習動機,Solace 也是個很好的上手教材
Solace Documentation
所有的 api 都是 open source 在 github 上
https://github.com/SolaceProducts
https://github.com/SolaceSamples
忙碌的 30 天,似乎不足以將一套完整架構交易系統說明完整
目前尚待完成的工作如下,也給自己留個紀錄